package com.tencreat.domain.mall;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.tencreat.common.annotation.Excel;
import com.tencreat.common.core.domain.BaseEntity;
import com.tencreat.common.enums.OrderStatus;
import com.tencreat.common.enums.OrderType;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;


/**
 * 商城 订单商品对象 mall_order_goods
 *
 * @author tencreat
 * @date 2021-08-19
 */
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@AllArgsConstructor
@NoArgsConstructor
@ApiModel
@TableName("mall_order_goods")
public class MallOrderGoods extends BaseEntity<MallOrderGoods>{
    private static final long serialVersionUID = 1L;


    /** $column.columnComment */
    @TableId(type = IdType.AUTO)
    @ApiModelProperty(value = "ID")
    private Long id;


    /** 订单表的订单ID */
    @Excel(name = "订单表的订单ID")
    @ApiModelProperty(value= "订单表的订单ID")
    @TableField("`order_sn`")
    private String orderSn;

    @Excel(name = "商品订单sn")
    @ApiModelProperty(value= "商品订单sn")
    @TableField("`order_goods_sn`")
    private String orderGoodsSn;


    /** 商品表的商品ID */
    @Excel(name = "商品表的商品ID")
    @ApiModelProperty(value= "商品表的商品ID")
    @TableField("`goods_id`")
    private Long goodsId;

    /** 商品的规格ID */
    @Excel(name = "商品的规格ID")
    @ApiModelProperty(value= "商品的规格ID")
    @TableField("`norms_id`")
    private Long normsId;


    /** 商品名称 */
    @Excel(name = "商品名称")
    @ApiModelProperty(value= "商品名称")
    @TableField("`goods_name`")
    private String goodsName;


    /** 商品名称 */
    @Excel(name = "商品描述")
    @ApiModelProperty(value= "商品描述")
    @TableField("`goods_brief`")
    private String goodsBrief;


    /** 商品编号 */
    @Excel(name = "商品编号")
    @ApiModelProperty(value= "商品编号")
    @TableField("`goods_sn`")
    private String goodsSn;


    /** 商品货品表的货品ID */
    @Excel(name = "商品货品表的货品ID")
    @ApiModelProperty(value= "商品货品表的货品ID")
    @TableField("`product_id`")
    private Long productId;


    /** 商品货品的购买数量 */
    @Excel(name = "商品货品的购买数量")
    @ApiModelProperty(value= "商品货品的购买数量")
    @TableField("`number`")
    private Integer number;


    /** 商品货品的售价 */
    @Excel(name = "商品货品的售价")
    @ApiModelProperty(value= "商品货品的售价")
    @TableField("`price`")
    private BigDecimal price;

    /** 商品货品的支付价格 */
    @Excel(name = "商品货品的支付价格")
    @ApiModelProperty(value= "商品货品的支付价格")
    @TableField("`pay_price`")
    private BigDecimal payPrice;

    /** 优惠券减免价格 */
    @Excel(name = "优惠券减免价格")
    @ApiModelProperty(value= "优惠券减免价格")
    @TableField("`coupon_price`")
    private BigDecimal couponPrice;


    /**
     * 订单状态
     */
    @Excel(name = "订单状态")
    @ApiModelProperty(value = "订单状态")
    @TableField("`order_status`")
    private OrderStatus orderStatus;

    /**
     * 售后状态，0是可申请，1是用户已申请，2是管理员审核通过，3是管理员退款成功，4是管理员审核拒绝，5是用户已取消
     */
    @Excel(name = "售后状态，0是可申请，1是用户已申请，2是管理员审核通过，3是管理员退款成功，4是管理员审核拒绝，5是用户已取消")
    @ApiModelProperty(value = "售后状态，0是可申请，1是用户已申请，2是管理员审核通过，3是管理员退款成功，4是管理员审核拒绝，5是用户已取消")
    @TableField("`aftersale_status`")
    private Integer aftersaleStatus;

    /**
     * 发货快递公司
     */
    @Excel(name = "发货快递公司")
    @ApiModelProperty(value = "发货快递公司")
    @TableField("`ship_channel`")
    private String shipChannel;

    /**
     * 发货编号
     */
    @Excel(name = "发货编号")
    @ApiModelProperty(value = "发货编号")
    @TableField("`ship_sn`")
    private String shipSn;


    /** 商品货品的邮费 */
    @Excel(name = "商品货品的邮费")
    @ApiModelProperty(value= "商品货品的邮费")
    @TableField("`postage`")
    private BigDecimal postage;

    /**
     * 发货开始时间
     */
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "发货开始时间", width = 30, dateFormat = "yyyy-MM-dd")
    @TableField("`ship_time`")
    private Date shipTime;



    /** 商品货品的规格列表 */
    @Excel(name = "商品货品的规格列表")
    @ApiModelProperty(value= "商品货品的规格列表")
    @TableField("`specifications`")
    private String specifications;


    /** 商品货品图片或者商品图片 */
    @Excel(name = "商品货品图片或者商品图片")
    @ApiModelProperty(value= "商品货品图片或者商品图片")
    @TableField("`pic_url`")
    private String picUrl;


    /** 订单商品评论，如果是-1，则超期不能评价；如果是0，则可以评价；如果其他值，则是comment表里面的评论ID。 */
    @Excel(name = "订单商品评论，如果是-1，则超期不能评价；如果是0，则可以评价；如果其他值，则是comment表里面的评论ID。")
    @ApiModelProperty(value= "订单商品评论，如果是-1，则超期不能评价；如果是0，则可以评价；如果其他值，则是comment表里面的评论ID。")
    @TableField("`comment`")
    private Long comment;


    /** 删除标志（0代表存在 2代表删除） */
    @TableLogic
    @TableField("`del_flag`")
    private String delFlag;

    /** 租户ID */
    @Excel(name = "租户ID")
    @ApiModelProperty(value= "租户ID")
    @TableField("`tenant_id`")
    private Long tenantId;

    @ApiModelProperty("用户id")
    private Long uuid;

    @ApiModelProperty(value = "订单类型")
    @TableField("`order_type`")
    private OrderType orderType;

    @ApiModelProperty("退货地址id")
    private Long addressId;

    @ApiModelProperty("确认收货时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime confirmTime;


    /**
     * 收货人名称
     */
//    @Excel(name = "收货人名称")
    @ApiModelProperty(value = "收货人名称")
    @TableField("`consignee`")
    private String consignee;


    /**
     * 收货人手机号
     */
//    @Excel(name = "收货人手机号")
    @ApiModelProperty(value = "收货人手机号")
    @TableField("`mobile`")
    private String mobile;


    /**
     * 收货具体地址
     */
//    @Excel(name = "收货具体地址")
    @ApiModelProperty(value = "收货具体地址")
    @TableField("`address`")
    private String address;

    /**
     * 收货地址id
     */
    @ApiModelProperty(value = "收货地址Id")
    @TableField("`receipt_address_id`")
    private Long receiptAddressId;


    /**
     * 优惠券id
     */
    @ApiModelProperty(value = "优惠券Id")
    @TableField("`coupon_id`")
    private Long couponId;

    @ApiModelProperty(value = "核销码")
    @TableField("`verification_code`")
    private String verificationCode;

    @ApiModelProperty(value = "是否核销订单  0 核销订单 1 扫码订单")
    @TableField("`verification_order`")
    private Integer verificationOrder;
}
